/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import Helpers.Validacao;
import java.io.Serializable;
import java.util.Date;
//import java.util.Set;

/**
 *
 * @author Frade
 */
public class Empregado implements Serializable {
    String Cpf;
    String Nome;
    char Sexo;
    Date DtNascimento;
    Date DtAdmissao;
    double Salario;
    Date DtDesligamento;
    Validacao Validacao;

    public Empregado(String Cpf, String Nome, char Sexo, Date DtNascimento, Date DtAdmissao, double Salario, Date DtDesligamento) throws Exception {
        Validacao = new Validacao();
        setCpf(Cpf);
        setNome(Nome);
        setSexo(Sexo);
        setDtNascimento(DtNascimento);
        setDtAdmimissao(DtAdmissao);        
        setSalario(Salario);
        setDtDesligamento(DtDesligamento);
    }   
    public Empregado(String Cpf) throws Exception{
        Validacao = new Validacao();
        setCpf(Cpf);
    }
    public String getCpf() {
        return Cpf;
    }
    public void setCpf(String Cpf) throws Exception{
            this.Cpf = ValidaCpf(Cpf);
    }
    private String ValidaCpf(String cpf) throws Exception{
        if(Validacao.ValidaCPF(cpf)){
            return cpf;
        }else{
            throw new Exception("Erro: CPF invalido");
        }   
    }
    public String getNome() {
        return Nome;
    }
    public void setNome(String Nome) throws Exception {
        this.Nome = ValidaNome(Nome);
    }
    private String ValidaNome(String nome) throws Exception{
        int maxLenght = 100;
        if(nome.length() < maxLenght)
            return nome;
        else
            throw new Exception("O nome deve ter menos de "+ maxLenght + " Caracteres");
    }
    public char getSexo() {
        return Sexo;
    }
    public void setSexo(char Sexo) throws Exception {
        this.Sexo = ValidaSexo(Sexo);
    }
    private char ValidaSexo(char sexo) throws Exception{
        String sexos = "MmFf";
        if(sexos.contains(String.valueOf(sexo))){
            return sexo;
        }else{
            throw new Exception("Sexo invalido");
        }
    }
    public Date getDtNascimento() {
        return DtNascimento;
    }
    public void setDtNascimento(Date DtNascimento) throws Exception{
        this.DtNascimento = ValidaNascimento(DtNascimento);
    }
    private Date ValidaNascimento(Date dtNascimento) throws Exception{
        int ano = 18;
        Date inicio = new Date();
        inicio.setYear(inicio.getYear() - ano);
        if(dtNascimento.before(inicio)){
            return dtNascimento;
        }
        throw new Exception("Voce deve ter mais de 18 anos");
    } 
    public Date getDtAdmimissao() {
        return DtAdmissao;
    }
    public void setDtAdmimissao(Date dtAdmissao) throws Exception {
        this.DtAdmissao = ValidaAdmissao(dtAdmissao);
    }
    private Date ValidaAdmissao(Date dtAdmissao) throws Exception{
        if(dtAdmissao.after(this.DtNascimento)){
            return dtAdmissao;
        }
        throw new Exception("Data admissao invalida");
    }
    public double getSalario() {
        return Salario;
    }
    public void setSalario(double Salario) {
        this.Salario = Salario;
    }
    public Date getDtDesligamento() {
        return DtDesligamento;
    }
    public void setDtDesligamento(Date DtDesligamento) throws Exception{
        this.DtDesligamento = ValidaDesligamento(DtDesligamento);
    }
    private Date ValidaDesligamento(Date dtDesligamento) throws Exception{
        if(dtDesligamento.after(DtAdmissao)){
            return dtDesligamento;
        }else{
            throw new Exception("Data de desligamento deve ser maior que data de admissão");
        }
        
    }
    public int getIdade(){
        return (new Date().getYear() - DtNascimento.getYear());
    }
}
